/**
 * 根据 HTTPS 地址下载 PDF 文件到本地
 * @param {string} url - PDF 文件的 HTTPS 地址
 * @param {string} [fileName='document.pdf'] - 下载后的文件名
 * @param {Function} [onProgress] - 下载进度回调函数 (progress: number) => void
 * @returns {Promise<void>} - 下载完成后 resolve 的 Promise
 */
export async function downloadPdf(url, fileName = 'document.pdf', onProgress) {
    let newFilename = ''
    try {
        let arr = url.split('/');
        let name = arr[arr.length - 1].split('.')
        newFilename = name[0]
    } catch (error) {
        newFilename = fileName
    }


    // 验证 URL 是否为 HTTPS
    //   if (!url.startsWith('https://')) {
    //     throw new Error('URL 必须是 HTTPS 协议');
    //   }

    // 尝试使用 fetch API 下载 (支持进度显示)
    try {


        const response = await fetch(url);

        if (!response.ok) {
            throw new Error(`HTTP 错误，状态码: ${response.status}`);
        }

        // 检查是否有 Content-Disposition 头，如果有则从中提取文件名
        // const contentDisposition = response.headers.get('content-disposition');
        // if (contentDisposition) {
        //     const fileNameMatch = contentDisposition.match(/filename="?([^"]+)"?/);
        //     if (fileNameMatch && fileNameMatch[1]) {
        //         fileName = fileNameMatch[1];
        //     }
        // }


        // 检查响应是否为 PDF 类型
        const contentType = response.headers.get('content-type');
        if (contentType && !contentType.includes('application/pdf')) {
            console.warn('下载的文件类型不是 PDF，但仍会尝试保存');
        }

        // 获取内容长度用于进度计算
        const contentLength = response.headers.get('content-length');

        if (contentLength && typeof onProgress === 'function') {
            // 下载带进度显示
            const total = parseInt(contentLength, 10);
            const reader = response.body.getReader();
            const chunks = [];
            let receivedLength = 0;

            while (true) {
                const { done, value } = await reader.read();

                if (done) {
                    break;
                }

                chunks.push(value);
                receivedLength += value.length;

                // 计算并报告进度 (0-100)
                const progress = Math.round((receivedLength / total) * 100);
                onProgress(progress);
            }

            // 合并所有数据块
            const blob = new Blob(chunks, { type: 'application/pdf' });

            saveBlobToFile(blob, newFilename);
        } else {
            // 下载不带进度显示
            const blob = await response.blob();
            saveBlobToFile(blob, newFilename);
        }
    } catch (error) {
        console.error('使用 fetch API 下载失败:', error);

        // 回退到基本下载方法
        try {
            downloadPdfBasic(url, newFilename);
        } catch (fallbackError) {
            throw new Error(`下载失败: ${error.message}，备用方法也失败: ${fallbackError.message}`);
        }
    }
}

/**
 * 使用基本方法下载 PDF (通过创建 a 标签)
 * @param {string} url - PDF 文件的 URL
 * @param {string} fileName - 下载后的文件名
 */
function downloadPdfBasic(url, fileName) {
    // 创建隐藏的 a 标签
    const link = document.createElement('a');
    link.href = url;
    link.download = fileName;

    // 模拟点击
    document.body.appendChild(link);
    link.click();

    // 清理
    document.body.removeChild(link);
}

/**
 * 将 Blob 对象保存为文件
 * @param {Blob} blob - 要保存的 Blob 对象
 * @param {string} fileName - 文件名
 */
function saveBlobToFile(blob, fileName) {
    // 创建下载链接
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = fileName;

    // 模拟点击
    document.body.appendChild(link);
    link.click();

    // 清理
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
}

// 示例用法
/*
downloadPdf(
  'https://example.com/sample.pdf',
  'my-document.pdf',
  (progress) => {
    console.log(`下载进度: ${progress}%`);
    // 可以在这里更新进度条 UI
  }
)
.then(() => {
  console.log('下载完成');
})
.catch(error => {
  console.error('下载失败:', error);
});
*/